package org.jeecg.modules.xxgx.djgl.vo;

import com.xkcoding.http.util.StringUtil;
import lombok.Data;
import org.jeecg.modules.xxgx.djgl.dto.BaseValid;
import org.jeecg.modules.xxgx.djgl.enums.PzlxEnum;
import org.jeecgframework.poi.excel.annotation.Excel;

import javax.validation.constraints.Digits;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Positive;
import java.math.BigDecimal;

@Data
public class CepzmxVo extends BaseValid<CepzmxVo> {
    /**
     * 单据编号（导入的时候用）
     */
    @Excel(name = "单据编号")
    private String djbh;
    /**
     * 序号
     */
    @NotBlank(message ="序号不能为空")
    private String xh;
    /**
     * 凭证类型
     */
    @Excel(name = "凭证类型")
    @NotBlank(message = "凭证类型不能为空")
    private String pzlx;
    /**
     * 发票代码
     */
    @Excel(name = "发票代码")
    private String fpdm;
    /**
     * 发票号码
     */
    @Excel(name = "全电发票号码")
    private String fphm;
    /**
     * 增值税发票号码
     */
    @Excel(name = "发票号码")
    private String zzfphm;
    /**
     * 凭证号码
     */
    @Excel(name = "凭证号码")
    private String pzhm;
    /**
     * 开具日期
     */
    @Excel(name = "开具日期")
    @NotBlank(message = "开具日期不能空")
    private String kjrq;
    /**
     * 合计金额
     */
    @NotNull(message = "合计金额不能为空")
    @Digits(integer=22,fraction=2,message=" 合计金额必须为一个小数，且整数部分的位数不能超过18位，小数部分的位数不能超过2位")
    @Positive(message = "合计金额必须正数")
    private BigDecimal hjje;
    /**
     * 扣除额
     */
    @NotNull(message = "扣除额不能为空")
    @Digits(integer=22,fraction=2,message=" 扣除额必须为一个小数，且整数部分的位数不能超过18位，小数部分的位数不能超过2位")
    @Positive(message = "扣除额必须正数")
    private BigDecimal kce;
    /**
     * 备注
     */
    @Excel(name = "备注")
    @NotBlank(message ="备注不能为空" )
    private String bz;
    /**
     * 来源 0 手工录入，1勾选录入，2模板录入
     */
    @NotBlank(message ="来源不能为空" )
    private String ly;
    /**
     * 本次扣除额
     */
    @Excel(name = "本次扣除金额")
    @NotNull(message = "本次扣除额不能为空")
    @Digits(integer=22,fraction=2,message=" 本次扣除额必须为一个小数，且整数部分的位数不能超过18位，小数部分的位数不能超过2位")
    @Positive(message = "本次扣除额必须正数")
    private BigDecimal bckcje;
    /**
     * 凭证合计金额
     */
    @Excel(name = "凭证合计金额")
    @NotNull(message = "凭证合计金额不能为空")
    @Digits(integer=22,fraction=2,message=" 凭证合计金额必须为一个小数，且整数部分的位数不能超过18位，小数部分的位数不能超过2位")
    @Positive(message = "凭证合计金额必须正数")
    private BigDecimal pzhjje;


    public Ret<String> selfCheck(){
        if(PzlxEnum.ZZSFP.getValue().equals(this.pzlx) || PzlxEnum.ZZSPP.getValue().equals(this.pzlx) || PzlxEnum.YYSFP.getValue().equals(this.pzlx)){
            if(StringUtil.isEmpty(this.fpdm)){
                return Ret.fail("凭证类型为增值税发票、增值税普通发票或营业税发票时，发票代码不能为空");
            }
        }
        if(PzlxEnum.QDFP.getValue().equals(this.pzlx)){
            if(StringUtil.isEmpty(this.fphm)){
                return Ret.fail("凭证类型为全电发票时，全电发票号码不能为空");
            }
        }
        if(PzlxEnum.ZZSFP.getValue().equals(this.pzlx) || PzlxEnum.ZZSPP.getValue().equals(this.pzlx)){
            if(StringUtil.isEmpty(this.zzfphm)){
                return Ret.fail("凭证类型为增值税发票或增值税普通发票时，发票号码不能为空");
            }
        }
        if(this.bckcje.compareTo(this.pzhjje)==1){
            return Ret.fail("本次扣除额不能大于凭证金额");
        }
        return Ret.success();
    }




}
